//
//  NSString+Encrypt.h
//  Project_Demo
//
//  Created by caoxiaozhu on 2018/7/3.
//  Copyright © 2018年 caoxiaozhu. All rights reserved.
//

#import <Foundation/Foundation.h>

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCrypto.h>

#import "GTMBase64.h"

//3DES和DES加密都需要秘钥



@interface NSString (Encrypt)

#pragma mark - base64
+ (NSString*)encodeBase64String:(NSString *)input;
+ (NSString*)decodeBase64String:(NSString *)input;

+ (NSString*)encodeBase64Data:(NSData *)data;
+ (NSString*)decodeBase64Data:(NSData *)data;


#pragma mark - DES
//    加密方法
+(NSString *) encryptUseDES:(NSString *)plainText;
//    解密方法
+(NSString *)decryptUseDES:(NSString *)cipherText;

#pragma mark - 3DES加密（CBC,PKCS7Padding）
/**

 @param key 秘钥
 @param iv 偏移量
 */
-(NSString *)enTriple3DESWithKey:(NSString *)key Iv:(NSString *)iv;

#pragma mark - MD5
- (NSString *) md5WithString;


#pragma mark - RSA

/**
 *   '.der'格式的公钥加密方法
 *
 *  @param str   需要加密的字符串
 *  @param path  '.der'格式的公钥文件路径
 */
+ (NSString *)encryptString:(NSString *)str publicKeyWithContentsOfFile:(NSString *)path;

/**
 *   '.p12'格式的私钥解密方法
 *
 *  @param str       需要解密的字符串
 *  @param path      '.p12'格式的私钥文件路径
 *  @param password  私钥文件密码
 */
+ (NSString *)decryptString:(NSString *)str privateKeyWithContentsOfFile:(NSString *)path password:(NSString *)password;

/**
 *  公钥加密方法
 *
 *  @param str    需要加密的字符串
 *  @param pubKey 公钥字符串
 */
+ (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;

/**
 *  私钥解密方法
 *
 *  @param str     需要解密的字符串
 *  @param privKey 私钥字符串
 */
+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;


#pragma mark - AES加密
//将string转成带密码的data
+ (NSString*)encryptAESData:(NSString*)string;
//将带密码的data转成string
+ (NSString*)decryptAESData:(NSString*)string;

#pragma mark - SHA1
/**
 类方法创建 sha1加密方式
 
 @param input 需要加密的字符串（适用于纯字符串以及带有中文的字符串）
 @return 加密后的字符串
 */
+(NSString *) Sha1:(NSString *)input;

/**
 类方法创建 sha256加密方式
 
 @param input 需要加密的字符串
 @return 加密后的字符串
 */
+ (NSString *)Sha256:(NSString *)input;


#pragma mark - MAC
/**
 类方法创建HMAC
 
 @param plaintext 需要加密的明文文本
 @param key 加密密钥
 @return 经过密钥加密后的文本
 */
+ (NSString *)Hmac:(NSString *)plaintext withKey:(NSString *)key;


@end
